package HuaWeiOd.Q4A;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * 你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成，过去几回合的得分可能会影响以后几回合的得分。
 * 比赛开始时，记录是空白的。
 * 你会得到一个记录操作的字符串列表 ops，其中ops[i]是你需要记录的第i项操作，ops遵循下述规则：
 * <p>
 * 整数x-表示本回合新获得分数x
 * “+” – 表示本回合新获得的得分是前两次得分的总和。
 * “D” – 表示本回合新获得的得分是前一次得分的两倍。
 * “C” – 表示本回合没有分数，并且前一次得分无效，将其从记录中移除。
 * 请你返回记录中所有得分的总和。
 * <p>
 * 示例1：
 * <p>
 * 输入：5 2 C D +
 * 输出：30
 * 解释：
 * “5”-记录加5，记录现在是[5]
 * “2”-记录加2，记录现在是[5,2]
 * “C”-使前一次得分的记录无效并将其移除，记录现在是[5].
 * “D”-记录加2*5=10，记录现在是[5，10].
 * “+”-记录加5+10=15，记录现在是[5，10，15].
 * 所有得分的总和5+10+15=30
 *
 * @author caihe
 * @date 2023/4/14 15:26
 */
public class D_投篮大赛 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] arr = sc.nextLine().split(" ");
        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            String s = arr[i];

            if (s.equals("+")) {
                int n = list.get(list.size() - 1) + list.get(list.size() - 2);
                list.add(n);
            } else if (s.equals("D")) {
                int n = list.get(list.size() - 1) * 2;
                list.add(n);
            } else if (s.equals("C")) {
                list.remove(list.size() - 1);
            } else {
                list.add(Integer.parseInt(s));
            }

        }

        Integer integer = list.stream().reduce(Integer::sum).get();

        System.out.println(integer);
    }
}
